package br.ucb.rest.persistencia.vo;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="rst_grupo_pedido")
@NamedQueries({
	@NamedQuery(name="GrupoPedidoVO.recuperarAbertos", 
		query="SELECT a FROM GrupoPedidoVO a " +
			"WHERE a.tipoStatusVO.nuStatus = 1 " +
			"ORDER BY a.dataHoraPedido "),
	@NamedQuery(name="GrupoPedidoVO.recuperarProntos", 
	query="SELECT a FROM GrupoPedidoVO a " +
		"WHERE a.tipoStatusVO.nuStatus = 2 " +
		"ORDER BY a.dataHoraPedido ")
})
public class GrupoPedidoVO implements Serializable {
	private static final long serialVersionUID = 1567569844767646229L;

	@Id
	@Column(name="nu_grupo", nullable=false)
	@SequenceGenerator(name="GrupoPedidoVO.idGen", sequenceName="restaurante.rst_grupo_pedido_nu_grupo_seq")
	@GeneratedValue(generator="GrupoPedidoVO.idGen", strategy=GenerationType.AUTO)
	private Integer nuGrupo;
	
	@Column(name="numero_pedido", nullable=false)
	private Integer numeroPedido;
	
	@Column(name="identificador_ipad", nullable=false)
	private String identificadorIpad;
	
	@ManyToOne
	@JoinColumn(name="nu_mesa", nullable=false)
	private MesaVO mesaVO;

	@OneToMany(mappedBy="grupoPedidoVO", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
	@Fetch(FetchMode.SELECT)
	private List<PedidoVO> colPedidoVO;
	
	@Column(name="dt_hora_pedido", nullable=false)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataHoraPedido;
	
	@JoinColumn(name="nu_status", referencedColumnName="nu_status", nullable=false)
	@ManyToOne(fetch=FetchType.EAGER)
	private TipoStatusVO tipoStatusVO;
	
	@Transient
	private String cor;
	
	public Integer getNuGrupo() {
		return nuGrupo;
	}
	public void setNuGrupo(Integer nuGrupo) {
		this.nuGrupo = nuGrupo;
	}
	public Integer getNumeroPedido() {
		return numeroPedido;
	}
	public void setNumeroPedido(Integer numeroPedido) {
		this.numeroPedido = numeroPedido;
	}
	public MesaVO getMesaVO() {
		return mesaVO;
	}
	public void setMesaVO(MesaVO mesaVO) {
		this.mesaVO = mesaVO;
	}
	public Date getDataHoraPedido() {
		return dataHoraPedido;
	}
	public void setDataHoraPedido(Date dataHoraPedido) {
		this.dataHoraPedido = dataHoraPedido;
	}
	public List<PedidoVO> getColPedidoVO() {
		return colPedidoVO;
	}
	public void setColPedidoVO(List<PedidoVO> colPedidoVO) {
		this.colPedidoVO = colPedidoVO;
	}
	public String getCor() {
		return cor;
	}
	public void setCor(String cor) {
		this.cor = cor;
	}
	public TipoStatusVO getTipoStatusVO() {
		return tipoStatusVO;
	}
	public void setTipoStatusVO(TipoStatusVO tipoStatusVO) {
		this.tipoStatusVO = tipoStatusVO;
	}
	public String getIdentificadorIpad() {
		return identificadorIpad;
	}
	public void setIdentificadorIpad(String identificadorIpad) {
		this.identificadorIpad = identificadorIpad;
	}
	
}
